//给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。 
//
// 
//
// 示例 1: 
//
// 输入: [2,3,-2,4]
//输出: 6
//解释: 子数组 [2,3] 有最大乘积 6。
// 
//
// 示例 2: 
//
// 输入: [-2,0,-1]
//输出: 0
//解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 
// Related Topics 数组 动态规划 
// 👍 679 👎 0

package leetcode.editor.cn;

import java.util.PriorityQueue;

//Java：乘积最大子数组
public class P152MaximumProductSubarray{
    public static void main(String[] args) {
        Solution solution = new P152MaximumProductSubarray().new Solution();
        // TO TEST
        int[] arr={0,0,0,2,0,5};
        solution.getLeastNumbers(arr,0);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
        public int[] getLeastNumbers(int[] arr, int k) {

            if(arr==null||arr.length<=k){
                return arr;
            }

            PriorityQueue<Integer> priorityQueue=new PriorityQueue<>((v1, v2)->(v2-v1));

            for(int i=0;i<arr.length;i++){
                if(priorityQueue.size()<k){
                    priorityQueue.offer(arr[i]);
                }else{
                    if(arr[i]<priorityQueue.peek()){
                        priorityQueue.poll();
                        priorityQueue.offer(arr[i]);
                    }
                }
            }

            int res[]=new int[k];
            for(int i=0;i<k;i++){
                res[i]=priorityQueue.poll();
            }

            return res;
        }
}
//leetcode submit region end(Prohibit modification and deletion)

}
